1.1 Scanner -- from String to Tokens 中文版
《1.1 Scanner: from String to Tokens》中文版初稿。我在尝试英文写作,后续将维护英文版。
在编译原理中,Dart 源代码字符串,需要通过一个分词器(Tokenizer),将代码中的基础元素(Token)提取出来。这部分工作,由 Dart _fe_analyzer_shared 包的 scanner 模块负责。
scanner\scanner.dart
是该模块的入口,提供了两个方法:scan
和 scanString
,用于将字符串转为 Token 列表。区别在于前者处理 Utf 字节流,后者处理普通字符串。
这两个 scan
方法,内部基于一组 Scanner 类:以 AbstractScanner 为基类,派生出来 StringScanner 和 Utf8BytesScanner。对于这些 Scanner 类来说,最核心的是 tokenize 方法,它负责了具体的转化工作。
在 tokenize 方法中,有一个循环,会遍历字符串,在循环内部建立了大量的、一层一层的规则,根据字符之间的相互关系,判断出诸如关键词等 token 类型。
得到的 Token 列表类型为 Token。它内部是一个链表,连接到下一个 Token,直到结束。
Token 是对源代码的第一道处理。接下来这些 Token 会进入 Parser 模块中,进行第二道处理。
注:Dart 语言中一共有多少种 Token 呢?参见《Dart SDK Token Inheritance Relationship》
本文作者:Maeiee
本文链接:1.1 Scanner -- from String to Tokens 中文版
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!